-- 代金券id
local voucherId=ARGV[1]
-- 用户id
local userId=ARGV[2]
-- 订单id
local orderId=ARGV[3]

local stockKey="seckill:stock:"..voucherId
local orderKey="seckill:order:"..voucherId

-- 1. 判断库存是否充足
local strStock=redis.call('get',stockKey)
if(tonumber(strStock)<1)then
    -- 1.1.不充足直接返回1
    return 1
end
-- 1.2. 判断用户是否下单
if(redis.call('sismember',orderKey,userId)==1)then
    -- 1.3.已下单则返回2
    return 2
end
-- 1.4. 未下单则先扣减库存
redis.call('incrby',stockKey,-1)
-- 1.5. 将userId存入当前优惠券的set集合中
redis.call('sadd',orderKey,userId)
-- 1.6. 向stream.orders中添加消息，内容包含voucherId,userId,orderId
redis.call('xadd','stream.orders','*','id',orderId,'voucherId',voucherId,'userId',userId)
return 0

